package com.yuexunit.account.service;

import java.util.List;

import com.yuexunit.account.action.v2.model.AccountAlias;
import com.yuexunit.account.action.v2.model.Session;
import com.yuexunit.account.action.v2.model.VerifyCodeType;
import com.yuexunit.account.entity.AccountEntity;
import com.yuexunit.account.entity.AccountNameEntity;


/**
 * 帐号服务接口
 * @author wangjinshui
 */
public interface AccountService {
	/**
	 * 发送短信验证码
	 * @param type 验证码类型
	 * @param mobile 手机号码
	 * @param idCardNo 身份证号码
	 */
	public void sendVerifyCodeBySms(VerifyCodeType type, String mobile, String idCardNo);
	
	
	/**
	 * 创建帐号信息，身份证号及手机都为登录名
	 * @param fullName 姓名
	 * @param idCardNo 身份证号
	 * @param mobile 手机
	 * @param email 邮箱
	 * @param password 密码
	 */
	public Long createAccount(String fullName, String idCardNo, String mobile, String email, String password);
	
	
    /**
     * 登录
     * @param accountName 帐号
     * @param password 密码
     * @param appUuid 应用ID
     * @param appRoleType 帐号在应用中的角色
     * @return session uuid
     */
    public Session login(String accountName, String password, String appUuid, Integer appRoleType);


    Session loginById(Long accountId, String appUuid, Integer appRoleType);

    /**
     * 修改指定帐号的密码
     * @param sessionUuid 会话ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 新的会话ID
     */
    public Session updatePassword(String sessionUuid, String oldPassword, String newPassword);


    /**
     * 重置指定帐号的密码为“123456”。
     * @param accountId 帐号ID
     */
    public void resetPassword(Long accountId);


    /**
     * 禁用帐号
     * @param accountId 帐号ID
     */
    public void disableAccount(Long accountId);
    
    
    /**
     * 激活帐号
     * @param accountId 帐号ID
     */
    public void enableAccount(Long accountId);
    
    
    /**
     * 根据帐号ID查询帐号详情
     * @param accountId 帐号ID
     * @return 帐号详情
     */
    public AccountEntity inquireAccountDetail(Long accountId);

    
    /**
     * 根据Session UUID查询帐号详情
     * @param sessionUuid 会话ID
     * @return 帐号详情
     */
    public AccountEntity inquireAccountDetail(String sessionUuid);
    
    
    /**
	 * 忘记密码时，重置密码
	 * @param idCardNo 身份证号码
	 * @param mobile 手机号码
	 * @param verifyCode 校验码
	 * @param newPassword 新密码
	 */
	public void forgetPassword(String idCardNo, String mobile, String verifyCode, String newPassword);
	
	
	/**
	 * 修改登录手机时，发送短信验证码
	 * @param accountId 帐号ID
	 * @param oldPassword 旧密码
	 * @param newMobile 新手机号码
	 */
	public void changeMobileSms(Long accountId, String oldPassword, String newMobile);
	
	
	/**
	 * 修改登录手机
	 * @param accountId 帐号ID
	 * @param oldPassword 旧密码
	 * @param newMobile 新手机号码
	 * @param verifyCode 校验码
	 */
	public void changeMobile(Long accountId, String oldPassword, String newMobile, String verifyCode);
	
	
	/**
	 * 根据会话ID查找帐号ID
	 * @param sessionUuid 会话ID
	 * @return 帐号ID
	 */
	public Long inquireAccountId(String sessionUuid);
	
	
	/**
	 * 用户退出登录
	 * @param sessionUuid 会话ID
	 */
	public void logout(String sessionUuid);
	
	
	/**
	 * @param accountId 帐号ID
	 * @return 帐号名列表
	 */
	public List<AccountNameEntity> inquireAccountNameList(Long accountId);
	
	
	/**
	 * 批量删除帐号的登录名
	 * @param accountId 帐号ID
	 * @param accountNameList 帐号名列表
	 */
	public void deleteAccountName(Long accountId, List<String> accountNameList);
	
	
	/**
	 * 修改帐号的登录名
	 * @param accountAlias 帐号登录名
	 */
	public void updateAccountName(AccountAlias accountAlias);
}
